package com.atguigu03.date.jdk8;

import org.junit.Test;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Calendar;
import java.util.Date;

/**
 * ClassName: DateTimeTest
 * Package: com.atguigu03.date.jdk8
 * Description:
 *
 * @Author ZY
 * @Create 21:48
 * @Version 1.0
 */
public class DateTimeTest {

    /**
     * - 可变性:像日期和时间这样的类应该是不可变的。
     * - 偏移性:Date中的年份是从1900开始的，而月份都从0开始。
     * - 格式化:格式化只对Date有用，Calendar则不行。
     * - 此外，它们也不是线程安全的;不能处理闰秒等。
     */
    @Test
    public void test1(){
        String s1 = "hello";
        String s2 = s1.replace('l', 'w');//String的不可变性
        System.out.println(s1);// hello
        System.out.println(s2);// hewwo

        //体验Calendar类的不可变性
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH,23);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

    }

    @Test
    public void test2(){
     // - 偏移性:Date中的年份是从1900开始的，而月份都从0开始。
        Date date = new Date(2022,12,14);
        System.out.println(date);
    }

    /**
     * JDK8 中的新时间日期API ：LocalDate 、LocalTime 、LocalDateTime
     */

    @Test
    public void test3(){
        LocalDate ld = LocalDate.now();
        LocalTime lt = LocalTime.now();
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ld);//2025-08-29
        System.out.println(lt);//22:05:24.967027200
        System.out.println(ldt);//2025-08-29T22:05:24.967027200

        //of()：创建指定日期、时间
        LocalDate localDAte1 = LocalDate.of(2025,8,29);
        LocalDateTime localDateTime1 = LocalDateTime.of(2025,8,29,22,5,24);
        System.out.println(localDAte1);
        System.out.println(localDateTime1);

        //getXxx():获取
        LocalDateTime localDateTime2 = LocalDateTime.now();
        System.out.println(localDateTime2.getDayOfMonth());//29
        //体现不可变性
        LocalDateTime localDAteTime3 = localDateTime2.withDayOfMonth(10);
        System.out.println(localDateTime2);//2025-08-29T22:09:25.547661500
        System.out.println(localDAteTime3);//2025-08-29T22:09:25.547661500

        LocalDateTime localDateTime4 = localDateTime2.plusMonths(2);
        System.out.println(localDateTime4);
        System.out.println(localDateTime2);
    }

    /**
     * JDK8中的API ：Instant
     */
    @Test
    public void test4(){
        Instant instant = Instant.now();
        System.out.println(instant);//2025-08-29T14:15:39.725778700Z

    }
}
